<?php

namespace App\Http\Controllers\Admin;

use App\Model\User;
use App\Model\Role;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
// use Illuminate\Support\Facades\Crypt;

class UserController extends Controller
{
    /**
     * 管理员显示页面.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        //分页、多条件查询
        // $input = $request->all();
        // dd($input);
        $user = User::orderBy('id','asc')
            ->where(function($query) use($request){
                $username = $request->input('username');
                $email = $request->input('email');
                if (!empty($username)) {
                    # code...
                    $query->where('user_name','like','%'.$username.'%');
                }
                if (!empty($email)) {
                    # code...
                    $query->where('email','like','%'.$email.'%');
                }
            })->paginate($request->input('num')?$request->input('num'):5);

        $i = 1;
        // $user = User::paginate(1);
        return view('admin.user.list',compact('user','request','i'));
    }

    /**
     * 管理员信息添加页面.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        return view('admin.user.create');
    }

    /**
     * 接收新管理员信息,执行插入操作.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //接收表单数据，去除确认密码字段
        $info = $request->except('repassword');
        // dd($info);

        // $username = $info['email'];
        // $pass = Crypt::encrypt($info['pass']);
        //将密码进行Hash加密
        $info['password'] = Hash::make($info['password']);

        //执行创建管理员操作
        // $res = User::create(['user_name'=>$username,'user_pass'=>$pass,'email'=>$info['email']]);
        $res = User::insert($info,true);
        //判断执行结果，将状态返回至页面
        if ($res) {
            # code...
            $data = [
                'status'=>0,
                'message'=>'添加成功'
            ];
        } else {
            $data = [
                'status'=>1,
                'message'=>'添加失败'
            ];
        }
        return $data;
    }

    /**
     * 显示指定管理员.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * 管理员信息修改页面.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //根据ID，查询管理员信息
        $user = User::find($id);
        return view('admin.user.edit',compact('user'));
    }

    /**
     * 接收要修改的管理员信息,执行修改操作.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //接收表单数据
        // $username = $request->input('username');
        // $email = $request->input('email');
        // $res =  User::where('user_id', $id)
        //     ->update(['user_name' => $username,'email' => $email]);

        $info = $request->all();
        //更新当前管理员记录
        $res = User::where('id', $id)
            ->update($info,true);
        //判断执行结果，将状态返回至页面
        if ($res) {
            # code...
            $data = [
                'status' => 0,
                'message' => '修改成功'
            ];
        }else{
            $data = [
                'status' => 1,
                'message' => '修改失败'
            ];
        }
        return $data;
    }

    /**
     * 删除管理员.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //根据ID，删除管理员信息
        $res = User::where('id', $id)
            ->delete();
        //判断执行结果，将状态返回至页面
        if ($res) {
            # code...
            $data = [
                'status' => 0,
                'message' => '删除成功'
            ];
        }else{
            $data = [
                'status' => 1,
                'message' => '删除失败'
            ];
        }
        return $data;
    }

    /**
     * 批量删除管理员.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function delAll(Request $request)
    {
        //接收要删除管理员的ID集合
        $ids = $request->input('ids');
        //根据管理员ID，删除相关记录
        $res = User::where('id',$ids)->delete();
        //判断执行结果，将状态返回至页面
        if ($res) {
            # code...
            $data = [
                'status' => 0,
                'message' => '删除成功'
            ];
        }else{
            $data = [
                'status' => 1,
                'message' => '删除失败'
            ];
        }
        return $data;
    }

    /**
     * 管理员角色授权页面.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function auth($id)
    {
        //查询相关管理员信息
        $user = User::find($id);
        //查询所有的角色
        $role = Role::get();
        
        //查询管理员所拥有的角色，并赋值给data
        $info = $user->role;
        $data = [];
        foreach ($info as $k => $v) {
            # code...
            $data[] = $v->id;
        }

        return view('admin.user.auth',compact('user','role','data'));
    }

    /**
     * 执行管理员角色授权.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function doAuth(Request $request)
    {
        // 接收表单数据
        $info = $request->all();

        // 删除管理员原有角色
        DB::table('user_role')->where('user_id',$info['id'])->delete();

        // 判断角色是否为空
        if(!empty($info['role_id'])){

            // 遍历循环并存储至数据库
            foreach ($info['role_id'] as $v){
                $res = DB::table('user_role')->insert([
                    'user_id'=>$info['id'],
                    'role_id'=>$v
                ]);
            }
        }else{
            $res = null;
        }
        //判断执行结果，将状态返回至页面
        if ($res) {
            # code...
            $data = [
                'status' => 0,
                'message' => '授权成功'
            ];
        }else{
            $data = [
                'status' => 1,
                'message' => '授权失败'
            ];
        }
        return $data;
    }
}
